Group 5:
Noah Levine
Marina Freitas
Alex Cardelle
Livesey Pack
These five maps each feature a base map of Cambridge, Massachusetts with two polygon layers (Cambridge neighborhoods and Cambridge recreation spaces) and one point layer (Cambridge playgrounds). The maps display the distribution of recreation spaces throughout Cambridge as well as the city’s playgrounds’ proximity to recreation spaces, or parks.
Each group member made at least two map iterations–a “good” map and a “bad” map. Five of the eight total maps are shown below.
ggplot() +
annotation_map_tile(zoomin = 0, progress = "none", type = "stamenwatercolor") +
geom_sf(data = parks, color = NA, alpha = 1, size = 0, aes(fill="Parks")) +
geom_sf(data = playgrounds, shape = 13, aes(color = "Playgrounds")) +
geom_sf(data = neighborhoods, color = "red", alpha = 0.05, size = 0.5, aes(fill="Neighborhoods")) +
scale_color_manual(values = "orange", name = "") +
scale_fill_manual(values = c("gray","lightblue"), name = "") +
labs(caption = "Map generated by Noah Levine, map tiles by Stamen Design, data from the City of Cambridge, and basemap by OpenStreetMap.") +
theme_map()
We each set out to make a “good” and a “bad” map. In the process of making the former, we made a number of missteps with respect to layering, coloring, point/line type, etc. This map represents the sum of our efforts—a compilation of bad decisions. First, the base map (stamenwatercolor) is more artistic than informative. Second, the point layer (playgrounds) is below the polygon layer (parks), and thus partially obscured. Also, the color of the points (orange) is too similar to the orange of the base map. Third, the color of the neighborhood boundaries (red) calls too much attention to itself.
ggplot() +
annotation_map_tile(zoomin = 0, progress = "none", type = "stamenbw") +
labs(caption = "Generated by Marina Freitas. Map tiles by Stamen Design. Data by OpenStreetMap.") +
geom_sf(data = neighborhoods, fill = NA, color = "#E12E2E", lty = 1, lwd = 1) +
geom_sf(data = parks, fill = "#2E8DE1", color = NA, alpha = 1) +
geom_sf(data = playgrounds, color = "#952EE1", aes(fill = "playgrounds")) +
scale_fill_manual(values = "orange", name = "") +
theme_map()
The purpose of this map was to experiment with colors without worrying about having a clear representation of the data. In this case, parks and playgrounds were presented in different shades of blue. Consequently, the map is difficult to read, mainly due to the excessive use of colors.
ggplot() +
annotation_map_tile(zoomin= 0, progress = "none", type= "cartolight") +
labs(caption= "Map generated by Livesey Pack, map tiles by Stamen Design,
data from the City of Cambridge, and basemap by OpenStreetMap.") +
geom_sf(data = neighborhoods, color= NA, alpha=1, aes(fill="Cambridge Neighborhoods")) +
geom_sf(data = parks, color= NA, alpha=1, aes(fill="Parks")) +
geom_sf(data = playgrounds, aes(color= "Playgrounds")) +
scale_fill_manual(values= c("darkgrey", "forestgreen"), name= "") +
scale_color_manual(values= c("black"), name="") +
theme_void()
This map focused on clearly distinguishing each of the map layers. The map uses three solid colors with limited transparency to represent each layer. These design decisions build on the strengths and limitations of the first and second maps. Color is used more effectively than in the first and second maps. The cartolight base map contrasts with the strong colors, building on the use of a grayscale base map as seen in the second map. However, the lack of transparency and outline, particularly in the neighborhoods polygon layer, ultimately undermines the overall effectiveness of the map.
ggplot() +
annotation_map_tile(zoomin = 0, progress = "none", type = "cartodark", alpha = 1) +
labs(caption = "Map generated by Alex Cardelle, map tiles by Stamen Design, data from the City of Cambridge, and basemap by OpenStreetMap.") +
geom_sf(data = neighborhoods, lty = 2.5, color = "azure", aes(fill = "Neighborhoods"), alpha = .15) +
geom_sf(data = parks, color = "cadetblue4",size = 0.25, aes(fill = "Parks"), alpha = .85) +
geom_sf(data = playgrounds, shape = 23, size = 3, fill = "goldenrod", aes(color = "Playgrounds"), alpha = .5) +
scale_color_manual(values = "darkorange", name = "") +
scale_fill_manual(values = c("darkgrey","cadetblue4"), name = "") +
theme_map()
After distilling the color choices for light-colored maps, we experimented with an inverted/dark layer to explore how the utility of the color choices change in this context. Using a combination of goldenrod and slate, we were able to highlight the parks without overpowering the darker elements. Additionally, transparency was used on the playground points to allow smaller park parcel outlines to remain visible.
ggplot() +
annotation_map_tile(zoomin = 0, progress = "none", type = "stamenbw", alpha = 0.1) +
geom_sf(data = neighborhoods, color = "black", alpha = 0.05, size = 0.15, lty = 2, aes(fill="Neighborhoods")) +
geom_sf(data = parks, color = NA, alpha = 0.4, size = 0, aes(fill="Parks")) +
geom_sf(data = playgrounds, shape = 16, aes(color = "Playgrounds")) +
scale_color_manual(values = "#F138B6", name = "") +
scale_fill_manual(values = c("white","#4FDE6D"), name = "") +
labs(caption = "Map generated by Marina Freitas, map tiles by Stamen Design, data from the City of Cambridge, and basemap by OpenStreetMap.") +
theme_map()
The main goal of this map was to have an easy-to-read representation. Thus, different colors and transparencies were used for each layer. The parks were represented in a light shade of green, while the playgrounds were illustrated in a vibrant shade of pink. As a result, it’s easy to identify the connection between parks and playgrounds on this map.
Each member of our group made important and different contributions to the final product. Alex collated our code and formatted our draft maps into a GitHub repository for Tuesday’s class. Livesey drafted the introduction statement for our maps. Marina found the data layers (“playgrounds.geojson,” “recreation.kml,” “neighborhoods.kml”) that became the basis of our maps. Lastly, Noah figured out how to include three variables (neighborhoods, parks, and playgrounds) in the legend using the scale_color_manual() and scale_fill_manual() commands. Therefore, the group allocated each individual member 10 points.
Produced at the GSD.